let x = 1;
let y = 2;
let z = 3;
let obj = {
    x,
    y
}
// es5定义key为变量
obj[z] = 5
console.log(obj)

// es6:
let objes6 = {
    'x': x,
    y,
    [z + y]: 6,
    // es5定义函数：
    // hello: function () {

    // },
    // es6定义函数：
    hello() {
        console.log('hello')
    },
    // 定义异步函数
    * helloAsyn() {
        console.log('hello')
    }
}
console.log(objes6);
objes6.hello()
objes6.helloAsyn() //不输出

// // es5:
// let objes5fn = {
//     'x': x,
//     y,

// }

//Set对象

let s = new Set()
// let s=new Set([1,2,3,4,5]) //凡是可遍历的set都可以接收
s.add('hello');
s.add('world');
// 会过滤1(重复数据)：
s.add('1').add('2').add('1').add('3');

// s.delete('hello') //删除一项

// s.clear() //删除全部

console.log(s.has('hello')) //判断是否有某个数据

console.log(s.has('hello'), s.size) //返回5 ,s.size指代目前已经存入数据的长度

// 由此看出还是一个object：
console.log(s.keys())
console.log(s.values())
// 返回全部键值对：
console.log(s.entries())

// 最常用的方式也可以变量数据
s.forEach(item => {
    console.log(item)
})

for (let item of s) {
    console.log(item)
}




let map = new Map([
    [1, 2],
    [3, 4]
]) //可以传入一个可遍历的对象,需要传入一个字典
console.log(map)

let map2 = new Map()
map2.set(1, 2);
map2.set(3, 'value-4');
map2.set(1, 'value-3');
console.log(map2) //和刚才是一样的
//重新赋值
map2.set(1, 3)
// 删除数据
// map2.delete(1)
// 全部删除
// map2.clear()

console.log(map2.size) //和set一样
// 查找(找的是索引)：
console.log(map2.has(1))
// 取值:
console.log(map2.get(1))

// 全部索引集合：
console.log(map2.keys(), map2.values(), map2.entries())


// map2.forEach((value, key) => {
//     console.log(value)
//     console.log(key)
// })


for (let [key, value] of map2) {
    console.log(key, value)
}

let o = function () {
    console.log('o')
}
map2.set(o, 4)
console.log(map2.get(0))


//WeekSet,WeekMap WeeKSet只能接收对象